import router from './router'
import store from './store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['/login'] // 白名单

router.beforeEach(async(to, from, next) => {
    // 开始进度条
    NProgress.start()
    //页面title
    document.title = 'cahnggou'

    // 确定用户是否已登录
    const hasToken = getToken()
    //已登录
    if (hasToken) {
        if (to.path === '/login') {
            // 如果已登录，当前路径是登录路径的话，则重定向到主页
            next({ path: '/' })
            NProgress.done()
        } else {
            // //已保存用户
            const username = store.getters.name
            if (username) {//表示已有
                next()
            } else {
                try {
                    //获取用户信息
                    await store.dispatch('GetInfo')
                    //获取用户按钮权限
                    await store.dispatch('GetButtons')
                    //获取菜单
                    const accessRoutes = await store.dispatch('permission/generateRoutes')
                    //通配的一定要加载最后面
                    accessRoutes.push({ path: '*', redirect: '/404', hidden: true })
                    //添加到路由表中
                    router.addRoutes(accessRoutes)
                    router.options.routes = store.getters.routes

                    next({ ...to, replace: true })
                } catch (error) {
                    // 删除token，进入登录页面重新登录
                    await store.dispatch('FedLogOut')
                    next(`/login?redirect=${to.path}`)
                    NProgress.done()
                }
            }
        }
    } else {//没有token表示未登录
        if (whiteList.indexOf(to.path) !== -1) {
            // 如果是登录路径的话继续下一步
            next()
        } else {
            // 如果不是登录路径，重定向登录
            next(`/login?redirect=${to.path}`)
            NProgress.done()
        }
    }
})

router.afterEach(() => {
    NProgress.done()
})
